/*
 * @Author: peng.chen2 peng.chen2@rt-mart.com
 * @Date: 2025-07-25 10:30:00
 * @LastEditors: peng.chen2
 * @LastEditTime: 2025-08-01 10:46:46
 * @FilePath: /rt-monitoring/src/service/api.ts
 * @Description: 技术看盘P1告警相关API
 */

import { BizType } from '@/config/types'
import httpClient from './request'

/**
 * 人员信息接口
 */
export interface PersonInfo {
  /** 名称 */
  name: string
  /** 手机号 */
  phoneNo: string
}

/**
 * 告警业务分组信息
 */
export interface GroupBizVo {
  /** ID */
  id: number
  /** 告警级别 */
  alarmLevel: number
  /** 告警级别名称 */
  alarmLevelName: string
  /** 发送模板编号 */
  templateCode: string
  /** 发送模板名称 */
  templateName: string
  /** 业务时间窗口标识 */
  bizKey: string
  /** 业务标识描述 */
  bizDesc: string
  /** 开始时间 */
  startTime: string
  /** 结束时间 */
  endTime: string
  /** 未读数量 */
  sumCount: number
  /** 是否发送工单 0 未发送 1 已发送 */
  ticketFlag: number
  /** 是否已读 0 未读 1 已读 */
  readFlag: number
  /** 检查处理标记 为1的时候展示未完成列表(0: 不展示 1: 展示) */
  checkDueFlag: number
  /** 已处理人员列表 checkDueFlag 为1时返回 */
  dueEndPersons?: PersonInfo[]
  /** 未处理人员列表 checkDueFlag 为1时返回 */
  notDuePersons?: PersonInfo[]
}

/**
 * 未读告警信息响应
 */
export interface UnreadAlertResponse {
  /** 总条数 */
  count: number
  /** 业务分组列表 */
  groupBizVos: GroupBizVo[]
}

/**
 * 发送模板信息
 */
export interface SendTempleteInfo {
  /** 模板ID */
  id: string
  /** 告警级别名称 */
  templeteName: string
}

/**
 * 一键上升接收组配置响应
 */
export interface RiseSendTemplateResponse {
  /** 升到发送模版列表 */
  toSendTempleteIds: SendTempleteInfo[]
}

/**
 * P1告警信息
 */
export interface P1AlarmInfo {
  /** ID */
  id: number
  /** 时间 */
  sendDate: string
  /** 标题 */
  alarmTitle: string
  /** 内容 */
  alarmContent: string
  /** 名称 */
  dueName: string
  /** 手机号 */
  duePhoneNo: string
  /** 其它告警人列表 */
  otherDuePersons: string
  /** 接听标识 0:未接听 1：已接听 */
  phoneAnsweredFlag: number
}

/**
 * P1告警列表响应
 */
export interface P1AlertListResponse {
  /** 总条数 */
  amount: number
  /** 告警信息列表 */
  alarmInfoVos: P1AlarmInfo[]
}
export interface ListParams {
  /** 通知人姓名 */
  receiverName?: string
  /** 是否接听 -1：全部 0：未接听 1：已接听 */
  phoneAnsweredFlag: number
  /** 业务类型 0：业务告警 1：运维告警 */
  bizType: BizType
  pageIndex: number
  pageSize: number
}

export interface AlertSummaryRes {
  /** 总条数 */
  amount: number
  /** 已收到的条数 */
  receivedAmount: number
  /** 丢失的条数 */
  missedAmount: number
}

/**
 * 技术看盘P1告警API类
 */
class TechAlertApi {
  /**
   * 查询告警信息未读条数
   * @param params 查询参数
   * @returns 未读告警信息
   */
  async queryGroupUnreadCardInfoV2(params: {
    userID: string
    groupId: string
    readChannel: string
    pageIndex: number
    pageSize: number
  }) {
    return httpClient.post<UnreadAlertResponse>(
      '/external/alertApi/queryGroupUnreadCardInfoV2',
      {
        token: '0c63f5c21c8a5cb567825f63a6156b07',
        apiVersion: '1261',
        body: params,
      }
    )
  }

  /**
   * 获取看盘一键上升接收组配置
   * @returns 接收组配置信息
   */
  async getRiseSendTemplate() {
    return httpClient.post<RiseSendTemplateResponse>(
      '/external/alertApi/riseSendTemplate',
      {
        token: '0c63f5c21c8a5cb567825f63a6156b07',
        apiVersion: '1261',
      }
    )
  }

  /**
   * 看盘一键上升告警
   * @param params 上升告警参数
   * @returns 操作结果
   */
  async riseAlertInfo(params: {
    userID: string
    msgId: string
    toSendTemplateId: string
  }) {
    return httpClient.post('/external/alertApi/riseAlertInfo', {
      token: '0c63f5c21c8a5cb567825f63a6156b07',
      apiVersion: '1261',
      body: params,
    })
  }

  /**
   * 查询P1告警列表(PC端)
   * @param params 查询参数
   * @returns P1告警列表
   */
  async queryP1List(params: {
    /** 通知人姓名 */
    receiverName?: string
    /** 是否接听 -1：全部 0：未接听 1：已接听 */
    phoneAnsweredFlag?: number
    /** 业务类型 0：业务告警 1：运维告警 */
    bizType?: BizType
    pageIndex: number
    pageSize: number
  }) {
    return httpClient.post<P1AlertListResponse>(
      '/external/alertApi/queryP1List',
      params
    )
  }

  /**
   * 修改P1告警接听状态(PC端)
   * @param params 修改参数
   * @returns 操作结果
   */
  async changeP1AlertStatus(params: { id: number; changePerson: string }) {
    return httpClient.post('/external/alertApi/changeP1AlertStatus', params)
  }
  async alertSummary(params: {
    queryStartTime: string
    queryEndTime: string
    bizType: BizType
  }) {
    return httpClient.post<AlertSummaryRes>(
      '/external/alertApi/alertSummary',
      params
    )
  }
}

// 导出技术看盘P1告警API实例
export const techAlertApi = new TechAlertApi()

export default techAlertApi
